"""
查询文档数据
"""
import os
import sys

path = os.path.dirname(__file__)
sys.path.append(os.path.join(path, '..'))

from conf.mongo_conf import BASIC_DATA_DB
from conf.config import COMPANY_STAFFS_LIST


class SearchDocument(object):
    company_staffs = BASIC_DATA_DB[COMPANY_STAFFS_LIST]

    def find_one(self):
        """查询一条数据"""
        document = self.company_staffs.find_one()
        print(document)

    def find_all(self):
        """查询所有数据"""
        documents = self.company_staffs.find()
        for document in documents:
            print(document)

    def find_custom_field(self):
        """查询指定字段"""
        documents = self.company_staffs.find(
            {'job': '销售行政助理', 'native_place_province': '广西壮族自治区'},
            {'name': 1, 'age': 1, 'phone_number': 1, 'company': 1}
        )
        for document in documents:
            print(document)

    def find_compare_all(self):
        """比较运算符查询"""
        documents = self.company_staffs.find(
            # 查询年龄大等于25岁，销售行政助理 & 广西壮族自治区
            {'job': '销售行政助理', 'native_place_province': '广西壮族自治区', 'age': {'$gte': 35}},
            {'name': 1, 'age': 1, 'phone_number': 1, 'company': 1}
        )
        for document in documents:
            print(document)

    def sort_one_field_find(self):
        """单个字段查询排序"""
        # 升序查询，age从小到大
        documents = self.company_staffs.find(
            {'job': '销售行政助理', 'native_place_province': '广西壮族自治区'}
        ).sort('age', 1)
        # 降序查询，age从大到小
        documents = self.company_staffs.find(
            {'job': '销售行政助理', 'native_place_province': '广西壮族自治区'}
        ).sort('age', -1)
        for document in documents:
            print(document)

    def sort_multiple_field_find(self):
        """多个字段查询排序"""
        documents = self.company_staffs.find(
            {'job': '销售行政助理', 'native_place_province': '广西壮族自治区'}
        ).sort([('sex', -1), ('age', -1)])  # 以性别倒叙排序后，在以年纪倒叙排序
        for document in documents:
            print(document)

    def find_limit(self):
        """限制查询条数"""
        documents = self.company_staffs.find(
            {'job': '销售行政助理'}
        ).limit(20)
        for document in documents:
            print(document)

    def find_paging_limit(self):
        """分页查询"""
        documents = self.company_staffs.find(
            {'job': '销售行政助理'}
        ).limit(10).skip(10)    # # 从第10篇文档开始获取10篇文档
        for document in documents:
            print(document)

    def custom_find(self):
        """
        自定义条件查询
        条件使用：JavaScript 条件表达式语句
        """
        documents = self.company_staffs.find(
            {'$where': "this.job == '销售行政助理' && this.age >= 35 && this.native_place_province == '黑龙江省'"}
        )
        for document in documents:
            print(document)

    def run(self):
        self.find_one()     # 查询一条数据
        self.find_all()     # 查询所有数据
        self.find_custom_field()    # 查询指定字段
        self.find_compare_all()    # 比较运算符查询
        self.sort_one_field_find()    # 单个字段查询排序
        self.sort_multiple_field_find()    # 多个字段查询排序
        self.find_limit()    # 限制查询条数
        self.find_paging_limit()    # 分页查询
        self.custom_find()    # 自定义条件查询


if __name__ == '__main__':
    search_document = SearchDocument()
    search_document.run()
